<?php 
class DepartmentsController extends AppController {	
	
	var $name 		= 'Departments';
	var $helpers 	= array('Html'); //TODO - helpers are in app_controller, not needed here
	var $uses 		= array(
		'Department'
	);
	
	var $paginate = array(
      'limit' => 10
	);
	
	function beforeFilter() {
	    parent::beforeFilter();
	    $this->set('title_for_layout', 'Katedry');
	    $this->Auth->allow(array());
		$this->Auth->authorize = 'actions';
	    if ($this->Session->read('Auth.User'))
			$this->Auth->allow('*');
	    
	}
	
	/**
	 * Defaultná metóda controlleru
	 * 
	 * Vykoná presmerovanie na metódu „admin_list“.
	 * 
	 */
	function index() {
		$this->redirect(array('admin' => true, 'controller' => 'departments', 'action' => 'list'));
	}
	
	//ADMIN
	
	/**
	 * Listing katedier
	 * 
	 * Za pomoci componentu „Pagination“ získa metóda príslušný počet záznamov typu „Department“ a pošle ich do view.
	 * 
	 */
	function admin_list() {
		//ziskanie zaznamov
		if ($this->Cookie->read('limit'))
			$this->paginate['limit'] = $this->Cookie->read('limit');
		$data = $this->paginate('Department', array('Department.is_deleted' => 0));
		$this->set('data', $data);
	}
	
	/**
	 * Pridanie katedier
	 * 
	 * Ak nie sú poslané žiadne POST data, metóda nevykonáva žiadnu akciu a zobrazí sa pridávací formulár. 
	 * Ak sú poslané, metóda skontroluje, či sú dáta korektné. Ak nie sú poslané údaje korektné, metóda o tom vygeneruje správu. 
	 * Ak áno, uloží poslané údaje do databázy a vygeneruje správu o úspešnom pridaní záznamu. 
	 * 
	 */
	function admin_add() {
		//kontrola poslanych udajov
		if (!empty($this->request->data)) {
			
			if ($this->Department->save($this->request->data))
				$this->Session->setFlash(DEPARTMENT_ADDED, 'default', array());
			else
				$this->Session->setFlash(DEPARTMENT_NOT_ADDED, 'default', array());
			
		}
	}
	
	/**
	 * Editovanie katedry
	 * 
	 * Ak nie sú poslané žiadne POST data, ani id, metóda zavolá presmerovanie na metódu „admin_list“. 
	 * Ak je poslané iba id, metóda získa z databázy záznam typu „Department“ s príslušným id a odošle ho do view, ktorý zobrazí editovací formulár. 
	 * Ak záznam s príslušným id neexistuje, metóda vygeneruje správu a zavolá presmerovanie na metódu „admin_list“. 
	 * Ak sú poslané POST data, metóda skontroluje, či sú dáta korektné. Ak nie sú dáta korektné, metóda o tom vygeneruje správu. 
	 * Ak áno, uloží poslané údaje do databázy a vygeneruje správu o úspešnom uložení záznamu. 
	 * 
	 * @param int $id
	 */
	function admin_edit($id = NULL) {
		//skontroluje, ci je nastavene id, alebo su poslane postdata
		if ($id == NULL && !empty($this->request->data)) 
			$this->redirect(array('admin' => true, 'controller' => 'departments', 'action' => 'list'));
		
		//ulozi poslane data
		if ($this->request->is('post')) {
			if ($this->Department->Save($this->request->data)) {
				//pri uspesnom ulozeni nastavime hlasku o uspesnoti a presmerujeme na listing katedier
				$this->Session->setFlash(DEPARTMENT_EDITED, 'default', array());
				$this->redirect(array('admin' => true, 'controller' => 'departments', 'action' => 'list'));
			} 
			else
				//pri neuspesnom ulozeni nastavime hlasku o neuspesnosti
				$this->Session->setFlash(DEPARTMENT_NOT_EDITED, 'default', array());
		}
		else {
			//nacitam usera do $this->request->data, kde bude pristupny vo view
			$this->request->data = $this->Department->read(null, $id);
		}
	}
	
	/**
	 * Zmazanie katedry
	 * 
	 * Ak nie je poslané id, metóda zavolá presmerovanie na metódu „admin_list“. 
	 * Ak je poslané id, metóda zistí, či nie je osoba asociovaná so žiadnou výzvou. 
	 * Ak áno, vygeneruje o tom chybovú správu. 
	 * Ak nie, uloží záznam s hodnotou „is_deleted“ nastavenou na 1. Potom vygeneruje správu o úspešnosti a zavolá presmerovanie na referer.
	 * 
	 * @param int $id
	 */
	function admin_delete($id) {
		//skontroluje, ci je nastavene id
		if ($id == NULL) 
			$this->redirect(array('admin' => true, 'controller' => 'departments', 'action' => 'list'));

		//zistime, ci je katedra naviazana na nejaky zaznam, ak ano vratime sa na listing a hodime hlasku
		if($this->Department->isAssociated($id)) {
			$this->Session->setFlash(DEPARTMENT_ASSOCIATED_W_PROJECT, 'default', array());
			$this->redirect(array('admin' => true, 'controller' => 'departments', 'action' => 'list'));
		}
			
			
		//pokusime sa nastavit is_deleted
		$department = array('Department' => array(
			'id' => $id,
			'is_deleted' => 1
		));
			
		if ($this->Department->save($department))
			//pri uspesnom zmazani nastavime hlasku o uspesnoti
			$this->Session->setFlash(DEPARTMENT_DELETED, 'default', array());
		else
			//pri neuspesnom zmazani nastavime hlasku o neuspesnosti
			$this->Session->setFlash(DEPARTMENT_NOT_DELETED, 'default', array());
		
		//zavolame presmerovanie na listing katedier
		$this->redirect(array('admin' => true, 'controller' => 'departments', 'action' => 'list'));
	}
		
}
?>